//header da modificacao no kernel
#define Max_tabela 100
#define Max_calendario 100

#include <stdbool.h>

//incluir IFDEFINE

//estrutura da celula da tabela (uma linha)
typedef struct
{
	int PID;
	double Intervalo;
	double Tmax;
} Celula_tabela;

//estrutura da tabela de processos inteira
typedef struct
{
	Celula_tabela Linha[Max_tabela];
} Tabela_processos;

//estrutura de um evento do calendario
typedef struct
{
	double Tempo;
	int PID;
	int Acao;	//1 = intervalo de execucao. 2 = tmax para executar
} Celula_calendario;

//estrutura do calendario de eventos
typedef struct
{
	Celula_calendario Evento[Max_calendario];
} Calendario;


//#############################  FUNCOES DA TABELA ############################
//imprime a tabela - debug
//void imprime_tabela(Tabela_processos *ProcessosRT);
//funcao de limpar a tabela
void limpa_tabela(Tabela_processos *ProcessosRT);
//funcao de inserir processo na tabela de processos rt
bool insere_processo(double Intervalo, double Tmax, int PID, Tabela_processos *ProcessosRT);
//funcao de remover processo da tabela de processos rt
bool remove_processo(int PID, Tabela_processos *ProcessosRT);
//funcao que retorna o valor Tmax de um proesso na lista
int retorna_tmax(int PID, Tabela_processos *ProcessosRT);
//funcao que retorna o valor Intervalo de um processo na lista
int retorna_intervalo(int PID, Tabela_processos *ProcessosRT);

//######################### FUNCOES DO CALENDARIO #############################
//Imprime calendario
//void imprime_calendario(Calendario *Eventos);
//funcao de limpar a lista de eventos
void limpa_calendario(Calendario *Eventos);
//funcao de inserir evento na lista de eventos
bool insere_evento(double Tempo, int PID, int Acao, Calendario *Eventos);
//funcao de remover evento da lista procurando pelo tempo
bool remove_evento_por_tempo(double Tempo, Calendario *Eventos);
//funcao de remover evento da lista procurando pelo PID
bool remove_evento_por_pid(int PID, Calendario *Eventos);
//funcao de retornar evento mais proximo de acontecer
bool proximo_evento(double *Tempo, int *PID, int *Acao, Calendario *Eventos);
